﻿// 中文注释：该文件实现了ChannelTableItem类的成员函数，包括构造函数、析构函数以及表格记录的清理和更新功能
#include "ChannelRecordWidget.h"
#include "ChannelTableItem.h"
#include "ui_ChannelTableItem.h"
#include <QProgressBar>
#include <QHeaderView>

/**
 * @brief ChannelTableItem 类的构造函数
 * @param parent 父窗口部件指针
 * 初始化UI对象、成员变量，创建时间轴部件并添加到布局，设置表格属性
 */
ChannelTableItem::ChannelTableItem(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ChannelTableItem),
    m_minXValue(0),  // X 轴最小值
    m_maxXValue(9000),  // X 轴最大值
    m_minYValue(0),  // Y 轴最小值
    m_maxYValue(200),  // Y 轴最大值
    m_timeLine(Q_NULLPTR)  // 时间轴部件指针初始化为空
{
    ui->setupUi(this);  // 设置 UI
    // 创建一个新的 ChannelTimeLineItem 实例，并传入坐标范围和父窗口部件
    m_timeLine = new ChannelTimeLineItem(m_minXValue, m_maxXValue, m_minYValue, m_maxYValue, this);
    ui->timeLineLayout->addWidget(m_timeLine);  // 将时间轴部件添加到布局中
    ui->tableWidget->setColumnCount(2);  // 设置表格部件的列数为 2
    ui->tableWidget->clear();  // 清空表格部件
    ui->tableWidget->setColumnWidth(0, 100);  // 设置表格第一列的宽度为 100
    cleanRecord();  // 调用清理记录的函数
}

/**
 * @brief ChannelTableItem 类的析构函数
 * 释放UI对象占用的内存
 */
ChannelTableItem::~ChannelTableItem()
{
    delete ui;  // 释放 UI 对象的内存
}

/**
 * @brief 清理表格记录
 * 移除表格中所有行的单元格部件，并清空表格内容
 */
void ChannelTableItem::cleanRecord()
{
    // 遍历表格的每一行
    for(int i=0; i<ui->tableWidget->rowCount(); ++i)
    {
        ui->tableWidget->removeCellWidget(i, 1);  // 移除每行第二列的单元格部件
    }
    ui->tableWidget->clear();  // 清空表格部件
}

/**
 * @brief 更新通道记录
 * @param num 通道记录的数量
 * 先清理现有记录，然后根据指定数量创建新的通道记录行
 */
void ChannelTableItem::updateChannelRecord(int num)
{
    cleanRecord();  // 先清理现有的记录
    ui->tableWidget->setRowCount(num);  // 设置表格的行数为指定的数量
    // 遍历每一行
    for(int i=0; i<num; ++i)
    {
        // 在每行第一列设置通道名称
        ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString("Channel_%1").arg(i+1)));
        // 在每行第二列设置通道记录部件
        ui->tableWidget->setCellWidget(i, 1, new ChannelRecordWidget(m_minXValue, m_maxXValue, m_minYValue, m_maxYValue));
        ui->tableWidget->setRowHeight(i, 200);  // 设置每行的高度为 200
    }
}
